package com.gpstracking.Servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.gpstracking.BE.Punto;
import com.gpstracking.BE.Ruta;
import com.gpstracking.BE.Usuario;
import com.gpstracking.BL.RutaBL;
import com.gpstracking.GData.GArea;
import com.gpstracking.Utils.Geometry.Point;

/**
 * Servlet implementation class ServletCreateRuta
 */
public class ServletRuta extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
	RutaBL rutaBL = new RutaBL();
    public ServletRuta() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		
    	HttpSession sesion = request.getSession(true);
    	Usuario usuario = (Usuario) sesion.getAttribute("user");
    	
		String idRuta= request.getParameter("idRuta");
		
		PrintWriter out = response.getWriter();
		
		if ( idRuta== null || idRuta.isEmpty() ){
			Object rutas = findAll(usuario);
			out.println( rutas );
		}else{
			//System.out.println( idRuta);
			Object ruta = findId(idRuta, usuario );
			out.println( ruta );
		}
		out.flush();
		out.close();	
		
		
	}
		
	private Object findId(String idRuta, Usuario usuario ){
		Ruta ruta = rutaBL.findById( Integer.parseInt( idRuta), usuario );
		JSONObject jsonRuta= new JSONObject();
		jsonRuta.put("RutaId",ruta.getIdRuta());
		jsonRuta.put("Nombre",ruta.getNombre());
		jsonRuta.put("Descripcion",ruta.getDescripcion());
		jsonRuta.put("Color",ruta.getColor());
		JSONArray puntos = new JSONArray();
		Set as = ruta.getPuntos();
		Iterator it = as.iterator();
		while( it.hasNext()){
			Punto p = ( Punto ) it.next(); 
			JSONObject punto= new JSONObject();
			punto.put("Latitud", p.getLatitud());
			punto.put("Longitud", p.getLongitud());
			puntos.add(punto);
		}
		jsonRuta.put("Puntos", puntos);
		return jsonRuta;
		}
		
		private Object findAll(Usuario usuario ) {
		
		
			List<Ruta> listaRutas = rutaBL.listarRutas(usuario); //esto bota las rutas activas
			JSONArray arrayObj = new JSONArray();
			
			for (Ruta ruta : listaRutas){
				JSONObject jsonRuta= new JSONObject();
				jsonRuta.put("RutaId",ruta.getIdRuta());
				jsonRuta.put("Nombre",ruta.getNombre());
				jsonRuta.put("Descripcion",ruta.getDescripcion());
				jsonRuta.put("Color",ruta.getColor());
				JSONArray puntos = new JSONArray();
				Set as = ruta.getPuntos();
				Iterator it = as.iterator();
				while( it.hasNext()){
					Punto p = ( Punto ) it.next(); 
					JSONObject punto= new JSONObject();
					punto.put("Latitud", p.getLatitud());
					punto.put("Longitud", p.getLongitud());
					puntos.add(punto);
				}
				jsonRuta.put("Puntos", puntos);
				arrayObj.add(jsonRuta);
						
			}
			return arrayObj;
		}
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		String idRuta = request.getParameter("idruta");
		String jsonPuntos = request.getParameter("puntos");
		String nombre = request.getParameter("nombre");
		String descripcion = request.getParameter("descripcion");
		String color = request.getParameter("color");
	
		
		List<Point> puntos = GArea.getPoints( jsonPuntos );
		
		RutaBL controller = new RutaBL();
		

		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession(true);
		Usuario usuario = (Usuario)session.getAttribute("user");
		
		if ( idRuta.equals("0") ){
			System.out.println("asda");
			boolean res = controller.registrar(nombre, descripcion, color, puntos, usuario);
			if ( res ){
				out.print("R1");
			}else{
				out.print("R0");
			}
		}else{
			boolean res = controller.modificar(Integer.parseInt(idRuta), nombre, descripcion, color, puntos, usuario);
			if ( res ){
				out.print("M1");
			}else{
				out.print("M0");
			}			
		}
		

	}

}
